package com.jietuo.class02;

import javafx.util.BuilderFactory;

import java.util.Stack;

/**
 * @author zhangx & jietuo_zx@163.com
 * @version 1.0
 * @date 2024/3/1
 * @description: 5, 实现一个特殊的栈，在基本功能的基础上，再实现返回栈中最小元素的功能
 * 1）pop、push、getMin操作的时间复杂度都是 O(1)。
 * 2）设计的栈类型可以使用现成的栈结构。
 */
public class Code05_SpecialStack {


    public static class SpecialStack {
        private Stack<Integer> data;
        private Stack<Integer> min;

        public SpecialStack() {
            data = new Stack<Integer>();
            min = new Stack<Integer>();
        }

        public void push(Integer val) {
            data.push(val);
            if (min.size() == 0) {
                min.push(val);
            } else {
                Integer peek = min.peek();
                if (val > getMin()) {
                    min.push(peek);
                } else {
                    min.push(val);
                }
            }
        }

        public Integer pop() {
            if (data.isEmpty()){
                throw new RuntimeException("Your stack is empty.");
            }
            min.pop();
            return data.pop();
        }

        public Integer getMin() {
            if (min.isEmpty()){
                throw new RuntimeException("Your stack is empty.");
            }
            return min.peek();
        }

    }

}
